import React,{Component} from 'react'
import PubSub from 'pubsub-js'
import './index.css'

export default class List extends Component{

  state = {
    users:[],   //初始值为数组
    isFirst:true,   //是否为第一次打开
    isLoading:false,  //标识是否处于加载中
    err:'',    //存储请求相关的错误信息
  }

  /*
    严格模式（StrictMode）：React 18 的严格模式会在开发环境中故意重复调用
        componentDidMount 和 componentWillUnmount
        以帮助开发者发现潜在问题（生产环境不会重复）
  */
  componentDidMount(){
    // 此处的meg也可以用"_"来作为占位符，subscribe用于订阅作用
    this.token = PubSub.subscribe('atguigu',(msg,stateObj)=>{
      this.setState(stateObj)
    })
  }

  componentWillUnmount(){
    PubSub.unsubscribe(this.token)
  }

  render(){

    const {users,isFirst,isLoading,err} = this.state

    return (
      <div className="row">
        {
          isFirst ? <h2>欢迎使用，请输入关键字，随后点击搜索按钮</h2> :
          isLoading ? <h2>Loading.....</h2> :
          err ? <h2 style={{color:'red'}}>{err}</h2> :
          users.map((userObj) => {
            return (
              <div key={userObj.id} className="card">
                <a href={userObj.html_url} target="_blank">
                  <img src={userObj.avatar_url} style={{width: '100px'}}/>
                </a>
                <p className="card-text">{userObj.login}</p>
              </div>
            )
          })
        }
      </div>
    )
  }
}